#pragma once


#include <memory>

#include "Containers/Containers.h"
#include "ScriptRuntime/ScriptInnerType.h"

class IIdentifierDescription;
class CTypeDescription;

#include "ScriptCompiler/Description/GenericTypeArguments.h"

struct SDecoratedTypeDescription
{
public:    
    bool IsValid() const;

    bool IsGeneralizedType() const;

    bool IsSameWith(const SDecoratedTypeDescription& Other) const;

    CString ToString() const;

    std::shared_ptr<CTypeDescription> BasicType;

    TVector<std::shared_ptr<CTypeDescription>> OverrideGenericClasses;

    bool IsValueType() const;
    //static std::shared_ptr<CTypeDescription> GetInnerTypeDescription(EScriptInnerType InnerType);
};